package colecoes;

import interfaces.InterfacePessoaFisica;

import java.util.Date;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JOptionPane;

import fachada.JDBC;
import basicas.Endereco;
import basicas.PessoaFisica;

public class ColPessoaFisica implements InterfacePessoaFisica{
	
	
	Vector pessoas = new Vector();   //Declaracao do Vetor
	
	
	
	/*  ------- Metodos Essenciais do sistema -------  */
	// Cadastra recebendo um objeto como parametro
	public void cadastrarPessoaFisica(PessoaFisica F) 
	throws ClassNotFoundException, SQLException{
		String sql = "insert into pessoafisica (email, codendereco, telefone, telefone2, datanascimento, sexo, cpf, nome, login, senha) values ('"+
		F.getEmail()+"',"+
		F.getEnd().getCodEndereco()+",'"+
		F.getTelefone()+"','"+
		F.getTelefone2()+"','"+
		F.getDataNascimento()+"','"+
		F.getSexo()+"','"+
		F.getCpf()+"','"+
		F.getNome()+"','"+
		F.getLogin()+"',"+"encrypt('"+
		F.getSenha()+"'"+","+"'"+"fooz" +"'"+","+"'"+"aes"+"'));";
		
		Statement conexao = JDBC.getsStatement();
		conexao.executeUpdate(sql);
		conexao.close();
	}
	
	
	/*  Consulta recebendo como parametro um 
	 *  numero inteiro e retornando um objeto
	 */
	public PessoaFisica consultaPessoaFisica(int codigo) 
	throws ClassNotFoundException, SQLException{
		String sql = "SELECT *FROM pessoafisica WHERE codfisica = " +codigo+";";
		Statement conexao = JDBC.getsStatement();
		ResultSet resultado = conexao.executeQuery(sql);
		
		ColEndereco ce = new ColEndereco();
		
		while (resultado.next()) {
			PessoaFisica pFisica = new PessoaFisica();
			pFisica.setEmail(resultado.getString("email"));
			pFisica.setNome(resultado.getString("nome"));
			pFisica.setCpf(resultado.getString("cpf"));
			pFisica.setSexo(resultado.getString("sexo"));
			int codEndereco = resultado.getInt("codEndereco");
			pFisica.setEnd(ce.consultarEndereco(codEndereco));
			return pFisica;
		}
		conexao.close();
		return null;
	}
	

	/*  Consulta recebendo como parametro um 
	 *  numero inteiro e retornando um objeto
	 */
	public PessoaFisica consultaFisicaNome(String nome) 
	throws ClassNotFoundException, SQLException{
		String sql = "SELECT *FROM pessoafisica WHERE nome = " +nome+";";
		Statement conexao = JDBC.getsStatement();
		ResultSet resultado = conexao.executeQuery(sql);
		
		ColEndereco ce = new ColEndereco();
		
		while (resultado.next()) {
			PessoaFisica pFisica = new PessoaFisica();
			pFisica.setEmail(resultado.getString("email"));
			pFisica.setNome(resultado.getString("nome"));
			pFisica.setCpf(resultado.getString("cpf"));
			pFisica.setSexo(resultado.getString("sexo"));
			int codEndereco = resultado.getInt("codEndereco");
			pFisica.setEnd(ce.consultarEndereco(codEndereco));
			return pFisica;
		}
		conexao.close();
		return null;
	}
	
	
	/*  Consulta recebendo como parametro uma 
	 *  string e retornando um vetor
	 */
	public Vector consultaFisicaFiltrada(String nome) 
	throws ClassNotFoundException, SQLException{
		String sql = "SELECT *FROM pessoafisica WHERE nome ILIKE " + "'" + "%"  +nome+ "%" + "'" + ";";
		Statement conexao = JDBC.getsStatement();
		ResultSet resultado = conexao.executeQuery(sql);
		
		ColEndereco ce = new ColEndereco();
		
		while (resultado.next()) {
			PessoaFisica pFisica = new PessoaFisica();
			pFisica.setEmail(resultado.getString("email"));
			pFisica.setNome(resultado.getString("nome"));
			pFisica.setCpf(resultado.getString("cpf"));
			pFisica.setSexo(resultado.getString("sexo"));
			int codEndereco = resultado.getInt("codEndereco");
			pFisica.setEnd(ce.consultarEndereco(codEndereco));
			pessoas.add(pFisica);
		}
		conexao.close();
		return pessoas;
	}
	
	
	// Lista o que estiver no banco retornando um vetor
	public Vector listarPessoaFisica() 
	throws ClassNotFoundException, SQLException{
		String sql = "SELECT *FROM pessoafisica;";
		Statement conexao = JDBC.getsStatement();
		ResultSet resultado = conexao.executeQuery(sql);
		
		while(resultado.next()){
			PessoaFisica ps = new PessoaFisica();
			ColEndereco ce = new ColEndereco();
			ps.setEmail(resultado.getString("email"));
			ps.setNome(resultado.getString("nome"));
			ps.setCpf(resultado.getString("cpf"));
			ps.setSexo(resultado.getString("sexo"));
			int codEndereco = resultado.getInt("codEndereco");
			ps.setEnd(ce.consultarEndereco(codEndereco));
			pessoas.add(ps);
		}
		conexao.close();
		return pessoas;
	}
	
	
	/*  Metodo de remove recebendo como
	 *  parametro um numero inteiro
	 */
	public void removerPessoaFisica(int codigo) 
	throws ClassNotFoundException, SQLException{
		String sql = "DELETE FROM pessoafisica where codfisica = "+codigo+";";
		Statement conexao = JDBC.getsStatement();
		conexao.executeUpdate(sql);
		conexao.close();
	}
	
	
	/*  Metodo de alteracao recebendo como
	 *  parametro todos os campos da tabela
	 */
	public void editarPessoaFisica(int codigo, String email, String telefone, String telefone2, Date dtNascimento, String sexo, String CPF, String nome, String login, String senha) 
	throws ClassNotFoundException, SQLException{
		String sql = "UPDATE pessoafisica SET email = '"+email+"', telefone = '"+telefone+"', telefone2 = '"+telefone2+"', datanascimento = '"+dtNascimento+"', sexo = '"+sexo+"', cpf = '"+CPF+"' nome = '"+nome+"', login = '"+login+"', senha = encrypt ('"+senha+"',"+"'"+"fooz" +"'"+","+"'"+"aes"+"') WHERE codfisica = "+codigo+";";
		Statement conexao = JDBC.getsStatement();
		conexao.executeUpdate(sql);
		System.out.println(sql);
		conexao.close();
	}
	
	
	/*  Metodo para verificacao de 
	 *  CPF existente no banco
	 */
	public void verificaCpfExiste(String CPF) throws ClassNotFoundException,
			SQLException {
		String sql = "SELECT cpf FROM pessoafisica WHERE cpf = '" + CPF + "';";
		Statement conexao = JDBC.getsStatement();
		ResultSet resultado = conexao.executeQuery(sql);

		while (resultado.next()) {
			PessoaFisica pf = new PessoaFisica();
			pf.setCpf(resultado.getString("cpf"));
			if (pf.getCpf().equals(CPF)) {
				JOptionPane.showConfirmDialog(null, " Este CNPJ Já Está Sendo "
						+ "Usado por outro Usuário  !!!!", "Atenção",
						JOptionPane.CLOSED_OPTION, JOptionPane.WARNING_MESSAGE);
			}
			conexao.close();
		}
	}

}
